/*
* Copyright 2001-2005 Stephen Colebourne
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.joda.time.format;
import java.util.Locale;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.joda.time.Chronology;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.MutableDateTime;
import org.joda.time.chrono.ISOChronology;
/**
* Makes sure that text fields are correct for English.
*
* @author Brian S O'Neill
*/
public class TestTextFields extends TestCase {
private static final DateTimeZone[] ZONES = {
DateTimeZone.UTC,
DateTimeZone.forID("Europe/Paris"),
DateTimeZone.forID("Europe/London"),
DateTimeZone.forID("Asia/Tokyo"),
DateTimeZone.forID("America/Los_Angeles"),
};
private static final String[] MONTHS = {
null,
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
private static final String[] WEEKDAYS = {
null,
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
};
private static final String[] HALFDAYS = {
"AM", "PM"
};
private DateTimeZone originalDateTimeZone = null;
private Locale originalLocale = null;
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static TestSuite suite() {
return new TestSuite(TestTextFields.class);
}
public TestTextFields(String name) {
super(name);
}
protected void setUp() throws Exception {
originalDateTimeZone = DateTimeZone.getDefault();
originalLocale = Locale.getDefault();
DateTimeZone.setDefault(ZONES[0]);
Locale.setDefault(Locale.ENGLISH);
}
protected void tearDown() throws Exception {
DateTimeZone.setDefault(originalDateTimeZone);
Locale.setDefault(originalLocale);
originalDateTimeZone = null;
originalLocale = null;
}
//-----------------------------------------------------------------------
public void testMonthNames_monthStart() {
DateTimeFormatter printer = DateTimeFormat.forPattern("MMMM");
for (int i=0; i<ZONES.length; i++) {
for (int month=1; month<=12; month++) {
DateTime dt = new DateTime(2004, month, 1, 1, 20, 30, 40, ZONES[i]);
String monthText = printer.print(dt);
assertEquals(MONTHS[month], monthText);
}
}
}
public void testMonthNames_monthMiddle() {
DateTimeFormatter printer = DateTimeFormat.forPattern("MMMM");
for (int i=0; i<ZONES.length; i++) {
for (int month=1; month<=12; month++) {
DateTime dt = new DateTime(2004, month, 15, 12, 20, 30, 40, ZONES[i]);
String monthText = printer.print(dt);
assertEquals(MONTHS[month], monthText);
}
}
}
public void testMonthNames_monthEnd() {
DateTimeFormatter printer = DateTimeFormat.forPattern("MMMM");
for (int i=0; i<ZONES.length; i++) {
Chronology chrono = ISOChronology.getInstance(ZONES[i]);
for (int month=1; month<=12; month++) {
DateTime dt = new DateTime(2004, month, 1, 23, 20, 30, 40, chrono);
int lastDay = chrono.dayOfMonth().getMaximumValue(dt.getMillis());
dt = new DateTime(2004, month, lastDay, 23, 20, 30, 40, chrono);
String monthText = printer.print(dt);
assertEquals(MONTHS[month], monthText);
}
}
}
public void testWeekdayNames() {
DateTimeFormatter printer = DateTimeFormat.forPattern("EEEE");
for (int i=0; i<ZONES.length; i++) {
MutableDateTime mdt = new MutableDateTime(2004, 1, 1, 1, 20, 30, 40, ZONES[i]);
for (int day=1; day<=366; day++) {
mdt.setDayOfYear(day);
int weekday = mdt.getDayOfWeek();
String weekdayText = printer.print(mdt);
assertEquals(WEEKDAYS[weekday], weekdayText);
}
}
}
public void testHalfdayNames() {
DateTimeFormatter printer = DateTimeFormat.forPattern("a");
for (int i=0; i<ZONES.length; i++) {
Chronology chrono = ISOChronology.getInstance(ZONES[i]);
MutableDateTime mdt = new MutableDateTime(2004, 5, 30, 0, 20, 30, 40, chrono);
for (int hour=0; hour<24; hour++) {
mdt.setHourOfDay(hour);
int halfday = mdt.get(chrono.halfdayOfDay());
String halfdayText = printer.print(mdt);
assertEquals(HALFDAYS[halfday], halfdayText);
}
}
}
}